import Dep from './dep.js';
// 劫持数据
export default class Observer{
    constructor(data){
       this.data=data;
      // 实现批量劫持数据
       this.walk(this.data);
    }

    // 批量劫持数据
    walk(data){
        if(!data||typeof data !=='object'){
            return false;
        }
        Object.keys(data).forEach(key=>{
            this.defineReactive(data,key,data[key]);
        });
    }

    // 实现数据劫持
    defineReactive(data,key,value){
        const dep=new Dep();
        Object.defineProperty(data,key,{
            get(){
                // 添加订阅者
                Dep.target && dep.addSub(Dep.target)
                return value;
            },
            set(newVal){
                value=newVal; 
                // 执行消息发布通知订阅者
                dep.notify();
            }
        });
        this.walk(value);
    }
}